package cn.wb.system.service.impl;

import cn.wb.base.service.impl.BaseServiceImpl;
import cn.wb.system.domain.Menu;
import cn.wb.system.service.IMenuService;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author itsource
 * @since 2023-01-03
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {

    @Override
    public List<Menu> first() {
        // 查询所有
//        List<Menu> all = super.findAll();
//        List<Menu> result = new ArrayList<>();
//        for (Menu menu : all) {
//            if (null == menu.getParentId()){
//                result.add(menu);
//            }
//        }
//        return result;
        return super.findAll().stream().filter(menu->null == menu.getParentId()).collect(Collectors.toList());
    }

    /**
     * 无限级数
     * @return
     */
    @Override
    public List<Menu> tree() {
        List<Menu> result = new ArrayList<>();
        // 查询所有
        List<Menu> all = findAll();
        // 根据all中的对象的parentID 进行分组 key : menu的id value：menu对象
        Map<Long, Menu> menuMap = all.stream().collect(Collectors.toMap(Menu::getId, menu -> menu));
        // 同等方法
//        Map<Long, Menu> menuMap = new HashMap<>();
//        for (Menu menu : all) {
//            menuMap.put(menu.getId(),menu);
//        }
        all.forEach(men->{
            if (null == men.getParentId()){
                result.add(men);
            }else {
               // 是儿子 要去找爹
                Menu menu = menuMap.get(men.getParentId());
                if (null != menu){
                    menu.getChildren().add(men);
                }
            }
        });
        return result;
    }
}
